package com.chinatgl.latte.delegates;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.ProgressBar;

import com.chinatgl.latte.R;
import com.chinatgl.latte.app.Latte;

/**
 * 文件描述:
 * 作者: Created by 杨伟乔 on 2017/8/9 0009.
 * 版本号: 1.0
 */

@SuppressWarnings("all")
/**
 * 创建状态布局
 * 封装了4种的不同的状态
 * 提供了对外的方法,显示不同的界面,在需要显示不同的界面的时候,只需要调用方法就可以了
 * 前三种的状态是直接在布局中写死的,因为内容界面显示的东西不一样,所有我们提供一个方法,让外界需要的时候,自己传入一个显示内容的界面
 * @author yangweiqiao
 *
 */
public class StateLayout extends FrameLayout {

    private ProgressBar loadingView;//正在加载
    public LinearLayout failView;//加载失败
    public LinearLayout emptyView;//空内容
    private View contentview;//内容界面布局
    private Context context;

    public StateLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
    }

    /**
     * 布局加载完成后 调用这个方法
     */
    @Override
    protected void onFinishInflate() {

        // 找到布局上的控件,布局中的3种状态

        loadingView = (ProgressBar) findViewById(R.id.loadingView);
        failView = (LinearLayout) findViewById(R.id.failView);
        emptyView = (LinearLayout) findViewById(R.id.emptyView);

        //默认显示正在加载

        showLoadingView();
    }

    /**
     * 显示界面
     */
    /**
     * 正在加载
     */
    public void showLoadingView() {
        showView(loadingView);
    }

    /**
     * 加载失败
     */
    public void showFailView() {

        showView(failView);
    }

    /**
     * 加载完成,但是界面没有内容
     */
    public void showEmptyView() {
        showView(emptyView);
    }

    /**
     * 加载出具体的内容界面
     */
    public void showContentView() {
        showView(contentview);

    }

    /**
     * 根据出入的view 设置传入的显示 其余的都隐藏
     *
     * @param view
     */
    private void showView(View view) {

        for (int i = 0; i < getChildCount(); i++) {
            // 一次获取对应的控件
            View childAt = getChildAt(i);
            // 设置控件的隐藏或者可见
            childAt.setVisibility(view == childAt ? View.VISIBLE : View.GONE);

        }

    }

    /**
     * 添加内容界面的方法,参数可以是资源的id或者是一个view ,方法内部会根据具体的方法进行判断
     */

    public void setContentView(Object IdorView) {

        // 判断传进来的参数是int id
        if (IdorView instanceof Integer) {
            //加载布局,当传入进来的是id时候,填充布局
            contentview = View.inflate(context, (Integer) IdorView,
                    null);

        } else {
            //传入进来的是view,直接赋值

            contentview = (View) IdorView;

        }
        //添加内容的界面到StateLayout
        addView(contentview);
//默认的内容界面是隐藏的
        contentview.setVisibility(View.GONE);

    }

}

